1. Field of the Invention
This invention relates generally to a method of controlling the rotating and printing of larger files, specifically when executing the rotate and print command from within a Java™ based application.
2. Description of the Related Art
There are various difficulties in providing an application remotely over a computer network to an end user. These difficulties are increased when the computer network is the internet. In regards to the internet, a first difficulty is in dealing with different operating system platforms that an end user, or remote user, may use. A second difficulty is the limitations in transmission bandwidth available to a remote user. This second difficulty is exasperated when one wishes to provide a graphics intensive application, such as image editing, over the internet. A third difficulty pertains to how to make the application workable with the varying capabilities of each remote user's individual computing device, or machine. For example, a first remote user may have a fast computer with much available memory while a second remote user may have a slower machine with a minimum amount of memory.
Various approaches have been tried to overcome the above difficulties. The first issue of how to deal with different operating systems, or platforms, has been addressed with the creation of platform independent internet, or web-based, browsers. Typically, a specialized browser is constructed for each platform, but each browser is designed to respond similarly to command scripts from a web-page authoring language, such as HTML and its deviants. Such web-page authoring languages, however, are limited in capabilities and various applications languages have therefore been developed to augment their functionality.
Java™ is one such application language that has gained much popularity, and contains built-in support for the internet, or world wide web. When compiled, a Java application generates byte codes that are interpreted on a Java virtual machined for interfacing with a machine's particular platform. A specialized virtual machine needs to be created for each platform, but once constructed, one can ideally create a single Java-based application that will run on several different computer platforms by virtue of their respective Java virtual machines. Another reason for Java's popularity is its ability to create programs designed to run as part of the web browser, referred to as applets, and programs designed to run as stand-alone, web-independent programs, referred to as Java apps. However, since Java runs on an intermediate layer of software, i.e. the platform-specific virtual machine, it can be slower than native code, which is compiled and optimized specifically for a target computer platform. To mitigate this speed penalty, several web browsers have implemented the use of just-in-time compilation to convert Java byte codes into a native programs when a Java applet is received. Additionally, and unlike native code, a Java applet or app can typically not gain access to any machine resources not specifically provided to it by the Java virtual machine. To address the resource limitation issue, a Java native interface has been added to the Java language to permit Java code to pass parameters between itself and native code written in a different computer language.
The second difficulty of low transmission bandwidths is typically addressed by reducing the capability of the web-based application, requiring that the remote user obtain a higher frequency access channel, or downloading an application once and having it incorporated into, or “plugged-in” to, the user's web browser's capabilities. Although it may still take a long time to down load an application, at least it only needs to be done once.
The third difficulty of how to deal with the differing computing capabilities of different end users is more difficult to address since, as explained above, access to a computer's hardware resources are typically limited in Java. Additionally, often times the capabilities of a web browser or virtual machine are further limited by engineers in charge of maintaining local networks in order to exert a greater control over the types of applications and computer resources available to an end user. Thus, this problem is usually addressed by posting a warning to a prospective end user listing the minimum computing capacity required to adequately run an internet application. The remote user must then determine if he possesses the required computing capacity, and if not, then determine whether to download and run the application in spite of possible low performance or incompatibility issues.
The above described issues are especially important when one wishes to provide an image editing application over the internet. A first reason for this is that if one wishes to permit the printing of a high-quality downloaded image, then the image should ideally be of high resolution. However, a high resolution image requires a large image file size, whose transmission is hampered by the relatively low transfer frequencies available to most remote users. For example, a high resolution image suitable for high quality printing may be several megabytes in size, and this would mean that a remote user would potentially need to wait an exorbitant amount of time to download the image before even beginning to use the image editing application.
Large image files pose another problem. As it is known in the art, a computing device, such as a remote user's personal computer, uses a large and permanent nonvolatile memory space, typically a hard drive, for storing permanent data, and uses a smaller random access memory, RAM, to manipulate data during the execution of an application. The reason this is pertinent to the present issue is that the size of a high resolution image file may actually be greater than the amount of RAM memory available to a remote user. Since Java has a minimum ability to control, and therefore to manage, hardware resources on a remote user's machine, it is quite likely that the application would cease to function, i.e. “crash”, when attempting to manipulate such a large image file. Even if one manages to overcome the above-described problems associated with a large image file, the end objective of simply printing the image poses its own compilations.
There are various revisions of Java available to a remote user. Earlier versions of Java supported no, and later only limited, printing capability. Only recently with the advent of “Java 2” has practical print functionality been made available. Thus, if one wishes to provide a Java-based application with printing functionality, one would presumably require that the end user upgrade his Java virtual machine to a version of “Java 2” or greater. This is generally not practical since it places an undue burden on the end user, especially if Java 2 is not available to the end user, or not compatible with the end user's computing resources.
Additionally, one cannot assure consistent print quality across all platforms to all end users using Java's printing functions. When printing in Java, one creates a print manager process that interfaces with a Java print formatting object and the printer's driver. The print manager process provides the user with the printer driver's graphics user interface, GUI, to collect page format and ink option details. The printer manager then sends kind of blank page to the Java print formatting object in essence draw on the blank page what is to be printed. The Java print formatting object returns the page to the printer manager which then passes the page and the collected printer options to the printer driver. The Java print formatting object uses Java drawing processes for generating the image to be printed, and is thus limited by Java's capabilities. For instance, the Java print formatting object can treat the blank page passed to it like a screen canvas, and can cast graphics context into Java's Graphics2D context to make use of Graphics2D's options for selecting that an image be created with higher or lower quality. However, not all platforms support modifications of the Graphics2D rendering mode so that specifying rendering options, such as improving or maintaining a high quality image, does not guarantee that specified option will be used.
What is needed is a method of utilizing Java's established platform portability to provide multiple remote users with a high quality image editing utility, while assuring reliability and providing consistent printing quality among the remote users.